/*
 * Licensed to the 南京汇海交通科技有限公司
 *
 * Copyright (c) 2025.
 * All rights reserved.
 *
 * 本软件属南京汇海交通科技有限公司所有，在未获得南京汇海交通科技有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.cje.client.support;

import cn.hutool.core.io.IoUtil;
import com.chframework.common.exception.SystemInterrupterException;
import com.cje.constant.exception.ErrorStatusEnum;
import feign.Request;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import lombok.extern.slf4j.Slf4j;

import java.io.ByteArrayInputStream;
import java.nio.charset.StandardCharsets;
import java.util.Optional;

/**
 * Feign请求拦截器
 */
@Slf4j
public class DefaultFeignInterceptor implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate requestTemplate) {
        try {
            // HttpServletRequest httpServletRequest = ServletHelper.getRequest();

            // 统一设置请求头
            // requestTemplate.header(name, httpServletRequest.getHeader(name));

            // 打印请求网络服务相关的入参，方便排查问题
            if (Request.HttpMethod.POST.name().equalsIgnoreCase(requestTemplate.method())) {
                Optional.ofNullable(requestTemplate.body())
                        .ifPresent(body -> {
                            String payload = IoUtil.read(new ByteArrayInputStream(requestTemplate.body()), StandardCharsets.UTF_8);
                            log.debug("Feign请求拦截器：发送网络服务`{}`的请求体为：{}", requestTemplate.url(), payload);
                        });
            } else if (Request.HttpMethod.GET.name().equalsIgnoreCase(requestTemplate.method())) {
                log.debug("Feign请求拦截器：发送网络服务`{}`", requestTemplate.url());
            } else {
                throw new SystemInterrupterException(ErrorStatusEnum.UNSUPPORT_HTTP_METHOD);
            }
        } catch (Exception e) {
            log.error("调用远程服务`{}`时发生异常:{}", e.getMessage(), requestTemplate.url(), e);
        }
    }

}
